5 1. on module up ... do the guys see eachother
6 2. file transfer in single block
7 3. File transfer as multi-part
8 4. Multi part transfer with more blocks than max block count
10 6. complete breakpoint coverage
11 7. treat case where a file exeists and is then deleted, making it inaccessible -> needs to be handled cleanly by readError()
15 - repository needs to be proactive relative to downloaders - needs to broadcast its updates
18 ** Olivier - allow FES to try several addresses and to select one that they succeed in opening...
19 ** this will allow us to have a single FES cfg used many times
21 ** note nllog.h is in game_share
22 ** backup modules are in game shre
25 - add delta() system + upload in 2 steps
26 - test generated screen file
28 - update the database directly
30 DAM - domain admin module
31 - get the domain description out of the database
36 AEM - admin executor module
37 - singleton for holding running service threads
38 - the running service thread (launch, stop, etc)
39 - api for singleton for use by AEM module
43 - msg to download new database script file
44 - msg to request transmit of script files
46 ATM - admin terminal module
48 - status / variables of services
53 - add 'spa_get' and 'spa_put' commands for sending / retrieving files
54 - add 'spa_exec' command to execute a command on a remote spa module
55 - display summary messages for the different dommains saying which proportion of machines are ready to go, which are up, etc
58 - generate patches with delta / ref management
59 - introduce weekly auto ref update / directory change
60 - update minver for re / rr to be a 4 week old version
61 - send a broadcast of some kind to spm* to set 'daily' (or other) install patch version to latest patch version
62 - synchronise client and server patch generation
63 - move server patches onto a different machine
64 => when 'daily' latest number is incremented, the server and client patch gen need to update themselves
65 => need to ensure that the process of assembling file set for patch generation is serialised (and not parellelised) with patch make
68 ------------------------
69 A Simple example module
70 ------------------------
72 /** \file spt_server_patch_terminal.cpp
77 //-----------------------------------------------------------------------------
79 //-----------------------------------------------------------------------------
82 #include "nel/net/module.h"
83 #include "nel/net/module_builder_parts.h"
84 #include "nel/net/module_manager.h"
87 #include "game_share/utils.h"
90 #include "spt_module_itf.h"
93 //-------------------------------------------------------------------------------------------------
95 //-------------------------------------------------------------------------------------------------
98 using namespace NLMISC;
99 using namespace NLNET;
100 using namespace PATCHMAN;
103 //-----------------------------------------------------------------------------
104 // class CServerPatchTerminal
105 //-----------------------------------------------------------------------------
107 class CServerPatchTerminal:
108 public CEmptyModuleServiceBehav<CEmptyModuleCommBehav<CEmptySocketBehav<CModuleBase> > >,
109 public CServerPatchTerminalSkel
112 // IModule specialisation implementation
113 void initModule(const TParsedCommandLine &initInfo);
114 void onProcessModuleMessage(IModuleProxy *sender, const CMessage &msg);
116 void onModuleUp(IModuleProxy *module);
117 void onModuleDown(IModuleProxy *module);
119 const std::string &getModuleManifest() const;
123 mutable NLMISC::CSString _Manifest;
125 // some macros for setting up the possiblity of having my own NLMISC_COMMAND scope
126 NLMISC_COMMAND_HANDLER_TABLE_EXTEND_BEGIN(CServerPatchTerminal, CModuleBase)
127 NLMISC_COMMAND_HANDLER_ADD(CServerPatchTerminal, dump, "Dump the current emiter status", "no args")
128 NLMISC_COMMAND_HANDLER_TABLE_END
130 NLMISC_CLASS_COMMAND_DECL(dump);
134 //-----------------------------------------------------------------------------
135 // methods CServerPatchTerminal - basics
136 //-----------------------------------------------------------------------------
138 CServerPatchTerminal::CServerPatchTerminal()
142 void CServerPatchTerminal::onProcessModuleMessage(IModuleProxy *sender, const CMessage &msg)
144 if (CServerPatchTerminalSkel::onDispatchMessage(sender, msg))
147 // unhandled message....
149 BOMB("CServerPatchTerminal::onProcessModuleMessage : received unhandled message '"<<msg.getName()<<"'", return);
153 void CServerPatchTerminal::initModule(const TParsedCommandLine &initInfo)
155 CModuleBase::initModule(initInfo);
156 nlinfo("SPM: Initialising");
159 const std::string &CServerPatchTerminal::getModuleManifest() const
166 //-----------------------------------------------------------------------------
167 // CServerPatchTerminal message callbacks
168 //-----------------------------------------------------------------------------
171 //-----------------------------------------------------------------------------
172 // CServerPatchTerminal NLMISC_COMMANDs
173 //-----------------------------------------------------------------------------
175 NLMISC_CLASS_COMMAND_IMPL(CServerPatchTerminal, dump)
177 NLMISC_CLASS_COMMAND_CALL_BASE(CModuleBase, dump);
179 log.displayNL("%s",getName().c_str());
185 //-----------------------------------------------------------------------------
186 // CServerPatchTerminal registration
187 //-----------------------------------------------------------------------------
189 NLNET_REGISTER_MODULE_FACTORY(CServerPatchTerminal,"ServerPatchTerminal");